package com.xy.webadmin.excel.strategy;


import com.xy.common.core.base.excel.BaseErrorExcelVo;
import com.xy.common.core.object.CallResult;

import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Map;
import java.util.Set;

public interface ExcelStrategy<T> {


    /**
     * 获取该策略类处理的类的字符串
     */
    String getStrategyClassStr();

    /**
     * 获取该策略类处理的类
     */
    Class<?> getStrategyClass();

    /**
     * 获取该策略类对应的errorExcel类
     */

    Class<?> getErrorExcelClass();



    /**
     * 验证导入数据列表。
     *
     * @param dataList               数据列表。
     * @param translatedDictFieldSet 已翻译的字典字段集合。
     * @return 验证结果。
     */
    public default CallResult verifyImportList(List<T> dataList, Set<String> translatedDictFieldSet) {
        return null;
    }

    /**
     * 验证导入数据列表，并记录错误信息。
     *
     * @param dataList               数据列表。
     * @param translatedDictFieldSet 已翻译的字典字段集合。
     * @param errorExcelList         错误信息列表。
     * @return 验证结果。
     */
    public default CallResult verifyImportList(List<?> dataList, Set<String> translatedDictFieldSet, List<BaseErrorExcelVo> errorExcelList) {
        return null;
    }

    /**
     * 初始化需要翻译的字典字段。
     *
     * @param translatedDictFieldSet 需要翻译的字典字段集合。
     */
    public default void initTranslatedDict(Set<String> translatedDictFieldSet) {
        return;
    }

    /**
     * 处理错误信息并生成错误 Excel 数据。
     *
     * @param errorExcelList 错误信息列表。
     * @param message        错误消息。
     * @param data           相关数据。
     */
    public default void handleErrorExcel(List<BaseErrorExcelVo> errorExcelList, String message, Object data) {
        return;
    }

    /**
     * 根据 ID 获取数据。
     *
     * @param id 数据 ID。
     * @return 数据对象。
     */
    public default T getById(Integer id) {
        return null;
    }

    /**
     * 保存新批次的数据。
     *
     * @param dataList 数据列表。
     * @param batch    批次号。
     */
    public default void saveNewBatch(List<?> dataList, int batch) throws UnsupportedEncodingException {
        return;
    }

    public default void handleDeptIdSearch(List<Map<String, Object>> dataList, String fieldName, List<?> errorExcelList) {
        return;
    }
}